﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Configuration;
using System.Data;

using Oracle.DataAccess.Client;

using produccion.clases;
using produccion.modelo;
using produccion.AccesoDatos;
using produccion.vistamodelo;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para Frm_AuditoriaDeOrdenes.xaml
    /// </summary>
    public partial class Frm_AuditoriaDeOrdenes : Window
    {
        #region VARIABLES PUBLICAS DEL FORMULARIO
            string _ConnectionString = ConfigurationManager.ConnectionStrings["produccion.Properties.Settings.CadenaConexion"].ConnectionString;
            VMvisorFotoReferencia VMFotoReferencia = new VMvisorFotoReferencia();
        #endregion
        public Frm_AuditoriaDeOrdenes()
        {
            InitializeComponent();
        }
        #region OBJETOS DEL FORMULARIO
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                DateTime DtmFecha = DateTime.Now;

                DtpFechaDesde.SelectedDate = DtmFecha.AddDays(-30);
                DtpFechaHasta.SelectedDate = DtmFecha;

                TxbCodigoCliente.Focus();
            }
            private void TxbCodigoCliente_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.Key == Key.Enter)
                {
                    PrivV_BuscarDato();
                }
            }
            private void TxbCodigoCliente_LostFocus(object sender, RoutedEventArgs e)
            {
                PrivV_BuscarDato();
            }
            private void TxbCodigoReferencia_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.Key == Key.Enter)
                {
                    PrivV_BuscarDato();
                }
            }
            private void TxbCodigoReferencia_LostFocus(object sender, RoutedEventArgs e)
            {
                PrivV_BuscarDato();
            }
            private void DtpFechaDesde_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
            {
                String MensajeError = PrivStr_ValidarFecha("Desde", DtpFechaDesde, DtpFechaHasta);
                if (MensajeError == "")
                {
                    PrivV_BuscarDato();
                }
                else
                {
                    MessageBox.Show(MensajeError, "BUSQUEDA CANCELADA", MessageBoxButton.OK, MessageBoxImage.Error);
                    DtpFechaDesde.Focus();
                }
            }
            private void DtpFechaHasta_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
            {
                String MensajeError = PrivStr_ValidarFecha("Hasta", DtpFechaDesde, DtpFechaHasta);
                if (MensajeError == "")
                {
                    PrivV_BuscarDato();
                }
                else
                {
                    MessageBox.Show(MensajeError, "BUSQUEDA CANCELADA", MessageBoxButton.OK, MessageBoxImage.Error);
                    DtpFechaHasta.Focus();
                }
            }
        #endregion

        #region PROCEDIMIENTOS Y FUNCIONES
            private void PrivV_BuscarDato()
            {
                #region Variables
                String StrCodigoCliente = "";
                String StrCodigoReferencia = "";
                String StrFechaDesde = "";
                String StrFechaHasta = "";
                #endregion

                #region CargamosValiables

                    StrCodigoCliente = TxbCodigoCliente.Text.ToUpper().Trim();
                    StrCodigoReferencia = TxbCodigoReferencia.Text.ToUpper().Trim();

                    VMFotoReferencia.strCodigo = StrCodigoReferencia;

                    DateTime? DtmFechaDesde = DtpFechaDesde.SelectedDate;
                    if (DtmFechaDesde == null)
                    {
                        StrFechaDesde = "";
                    }
                    else
                    {
                        StrFechaDesde = DtpFechaDesde.SelectedDate.Value.ToString("dd/MM/yy");
                    }
                    DateTime? DtmFechaHasta = DtpFechaHasta.SelectedDate;
                    if (DtmFechaHasta == null)
                    {
                        StrFechaHasta = "";
                    }
                    else
                    {
                        StrFechaHasta = DtpFechaHasta.SelectedDate.Value.ToString("dd/MM/yy");
                    }
                #endregion

                DtgDatos.DataContext = PubDts_EjecutarSp(StrCodigoCliente, StrCodigoReferencia, StrFechaDesde, StrFechaHasta);
            }
            public DataSet PubDts_EjecutarSp(string StrCodigoCliente, string StrCodigoReferencia, string StrFechaDesde, string StrFechaHasta)
            {
                using (Oracle.DataAccess.Client.OracleConnection _Conn = new Oracle.DataAccess.Client.OracleConnection(_ConnectionString))
                {
                    OracleDataAdapter da = new OracleDataAdapter();
                    OracleCommand cmd = new OracleCommand();
                    cmd.Connection = _Conn;
                    cmd.InitialLONGFetchSize = 1000;
                    cmd.CommandText = "SP_AudOrd";
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add("StrCodigoCliente", OracleDbType.Char).Value = StrCodigoCliente;
                    cmd.Parameters.Add("StrCodigoReferencia", OracleDbType.Char).Value = StrCodigoReferencia;
                    cmd.Parameters.Add("StrFechaDesde", OracleDbType.Char).Value = StrFechaDesde;
                    cmd.Parameters.Add("StrFechaHasta", OracleDbType.Char).Value = StrFechaHasta;
                    cmd.Parameters.Add("p_ResultSet", OracleDbType.RefCursor).Direction = ParameterDirection.Output;

                    da.SelectCommand = cmd;

                    DataSet _Bind = new DataSet();
                    da.Fill(_Bind, "MyDataBinding");

                    _Conn.Close();

                    return _Bind;
                }
            }
            private String PrivStr_ValidarFecha(String StrValidarDesdeOHasta, DatePicker DtpDesde, DatePicker DtpHasta)
            {
                #region Variables
                    String StrMensaje = "";
                    String StrDesde = "";
                    String StrHasta = "";
                #endregion

                #region CargamosValiables
                    DateTime? DtmDesde = DtpFechaDesde.SelectedDate;
                    if (DtmDesde == null)
                    {
                        StrDesde = "";
                    }
                    else
                    {
                        StrDesde = DtpFechaDesde.SelectedDate.Value.ToString("dd/MM/yy");
                    }
                    DateTime? DtmHasta = DtpFechaHasta.SelectedDate;
                    if (DtmHasta == null)
                    {
                        StrHasta = "";
                    }
                    else
                    {
                        StrHasta = DtpFechaHasta.SelectedDate.Value.ToString("dd/MM/yy");
                    }
                #endregion

                #region HacemosValidaciones
                    if (StrValidarDesdeOHasta == "Desde")//FJRF - SE VALIDA QUE TIPO DE DATO SE VA A VALIDAR
                    {
                        if (StrDesde == "")//FJRF - Preguntamos si la fecha tiene datos seleccionados y si no lo tiene hacemos lo siguiente
                        {
                            StrMensaje = "";//FJRF - Se puede buscar porque esto ya esta validado en los datos de busqueda
                        }
                        else//FJRF - SI TIENE FECHA SELECCIONADA
                        {
                            if (StrHasta == "")//FJRF - Preguntamos si hay una segunda fecha seleccionada
                            {
                                StrMensaje = "";//FJRF - LA FECHA ESTA BUENA PORQUE SOLO HAY UNA FECHA A BUSCAR: DESDE
                            }
                            else//FJRF - Si existe una segunda fecha seleccionada entonces hacemos lo siguiente
                            {
                                if (DtmDesde <= DtmHasta)//FJRF - Preguntamos si la fecha es menor o igual a la fecha final
                                {
                                    StrMensaje = "";//FJRF - LA FECHA ESTA BUENA
                                }
                                else
                                {
                                    StrMensaje = "La fecha inicial [DESDE], debe ser menor o igual a la fecha final [HASTA]";//FJRF - Enviamos mensaje de que no se puede buscar esta mala y por eso no trae datos
                                }
                            }
                        }
                    }
                    if (StrValidarDesdeOHasta == "Hasta")//FJRF - SE VALIDA QUE TIPO DE DATO SE VA A VALIDAR
                    {
                        if (StrHasta == "")//FJRF - Preguntamos si la fecha tiene datos seleccionados y si no lo tiene hacemos lo siguiente
                        {
                            StrMensaje = "";//FJRF - Se puede buscar porque esto ya esta validado en los datos de busqueda
                        }
                        else//FJRF - SI TIENE FECHA SELECCIONADA
                        {
                            if (StrDesde == "")//FJRF - Preguntamos si hay una primera fecha seleccionada
                            {
                                StrMensaje = "";//FJRF - LA FECHA ESTA BUENA PORQUE SOLO HAY UNA FECHA A BUSCAR: DESDE
                            }
                            else//FJRF - Si existe una segunda fecha seleccionada entonces hacemos lo siguiente
                            {
                                if (DtmDesde <= DtmHasta)//FJRF - Preguntamos si la fecha es menor o igual a la fecha final
                                {
                                    StrMensaje = "";//FJRF - LA FECHA ESTA BUENA
                                }
                                else
                                {
                                    StrMensaje = "La fecha final [HASTA], debe ser mayor o igual a la fecha inicial [DESDE]";//FJRF - Enviamos mensaje de que no se puede buscar esta mala y por eso no trae datos
                                }
                            }
                        }
                    }
                #endregion

                return StrMensaje;//FJRF - Retornamos valor de la validacion y si el mensaja va vacio todo esta bien
            }
        #endregion

            private void DtgDatos_PreviewKeyDown(object sender, KeyEventArgs e)
            {
                var elemento = e.OriginalSource as UIElement;
                if (e.Key == Key.Enter && elemento != null)
                {
                    e.Handled = true;
                    elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
                }
            }

            private void Window_KeyDown(object sender, KeyEventArgs e)
            {
                var elemento = e.OriginalSource as UIElement;
                if (e.Key == Key.F3 && elemento != null)
                {
                    if (MDOgeneral.logBusquedadAbierta == true) { MDOgeneral.logBusquedadAbierta = false; }
                }

                if (e.Key == Key.F4 && elemento != null)
                {
                    if (MDOgeneral.logBusquedadAbierta1 == true) { MDOgeneral.logBusquedadAbierta1 = false; }
                }

                if (e.Key == Key.F5 && elemento != null)
                {
                    if (MDOgeneral.logBusquedadAbierta2 == true) { MDOgeneral.logBusquedadAbierta2 = false; }
                }

            }
    }
}
